PROP_MNEMONICS_VISIBLE,
PROP_FOCUS_VISIBLE,
- PROP_IS_MAXIMIZED,
+ PROP_MAXIMIZED,
LAST_ARG
};
GTK_TYPE_WINDOW,
GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
- window_props[PROP_IS_MAXIMIZED] =
- g_param_spec_boolean ("is-maximized",
+ window_props[PROP_MAXIMIZED] =
+ g_param_spec_boolean ("maximized",
P_("Is maximized"),
P_("Whether the window is maximized"),
FALSE,
- GTK_PARAM_READABLE);
+ GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT|G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkWindow:application:
* immediately (or at all), as an effect of calling
* gtk_window_maximize() or gtk_window_unmaximize().
*
+ * If the window isn't yet mapped, the value returned will whether the
+ * initial requested state is maximized.
+ *
* Returns: whether the window has a maximized state.
*/
gboolean
g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
- return priv->maximized;
+ if (priv->surface && gdk_surface_get_mapped (priv->surface))
+ return priv->maximized;
+ else
+ return priv->maximize_initially;
}
void
case PROP_FOCUS_VISIBLE:
gtk_window_set_focus_visible (window, g_value_get_boolean (value));
break;
+ case PROP_MAXIMIZED:
+ if (g_value_get_boolean (value))
+ gtk_window_maximize (window);
+ else
+ gtk_window_unmaximize (window);
+ break;
case PROP_FOCUS_WIDGET:
gtk_window_set_focus (window, g_value_get_object (value));
break;
case PROP_FOCUS_VISIBLE:
g_value_set_boolean (value, priv->focus_visible);
break;
- case PROP_IS_MAXIMIZED:
+ case PROP_MAXIMIZED:
g_value_set_boolean (value, gtk_window_is_maximized (window));
break;
case PROP_FOCUS_WIDGET:
priv->maximized = (new_surface_state & GDK_TOPLEVEL_STATE_MAXIMIZED) ? TRUE : FALSE;
priv->maximize_initially = priv->maximized;
- g_object_notify_by_pspec (G_OBJECT (widget), window_props[PROP_IS_MAXIMIZED]);
+ g_object_notify_by_pspec (G_OBJECT (widget), window_props[PROP_MAXIMIZED]);
}
update_edge_constraints (window, new_surface_state);
* initially.
*
* You can track the result of this operation via the #GdkToplevel:state
- * property, or by listening to notifications on the #GtkWindow:is-maximized
+ * property, or by listening to notifications on the #GtkWindow:maximized
* property.
*/
void
gtk_window_maximize (GtkWindow *window)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
+ gboolean was_maximized_initially;
g_return_if_fail (GTK_IS_WINDOW (window));
+ was_maximized_initially = priv->maximize_initially;
priv->maximize_initially = TRUE;
- gtk_window_update_toplevel (window);
+ if (priv->surface && gdk_surface_get_mapped (priv->surface))
+ {
+ gtk_window_update_toplevel (window);
+ }
+ else if (!was_maximized_initially)
+ {
+ g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_MAXIMIZED]);
+ }
}
/**
* end up unmaximized. Just don’t write code that crashes if not.
*
* You can track the result of this operation via the #GdkToplevel:state
- * property, or by listening to notifications on the #GtkWindow:is-maximized
+ * property, or by listening to notifications on the #GtkWindow:maximized
* property.
*/
void
gtk_window_unmaximize (GtkWindow *window)
{
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
+ gboolean was_maximized_initially;
g_return_if_fail (GTK_IS_WINDOW (window));
+ was_maximized_initially = priv->maximize_initially;
priv->maximize_initially = FALSE;
gtk_window_update_toplevel (window);
+
+ if (priv->surface && gdk_surface_get_mapped (priv->surface))
+ gtk_window_update_toplevel (window);
+ else if (was_maximized_initially)
+ g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_MAXIMIZED]);
}
/**